package entidades;

import util.*;
import java.io.*;
import java.util.Map;
import java.util.HashMap;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author JFM
 */
public class Tiempos
	{
	private static int diasEspera;

	private static int cicloMinimo;
	private static int cicloMedio;
	private static int cicloMaximo;

        private static int diasConfeccion;

	private static String TABLA_DEPOSITO_X_NEWLONG_X_UTECO = "tiempos_deposito_x_newlong_x_uteco";
	private static String TABLA_DESPACHO_X_NEWLONG_X_PAIS = "tiempos_despacho_x_newlong_x_pais";
	private static String TABLA_DESPACHO_X_LINEA = "tiempos_despacho_x_linea";
	
	static
		{ leerValores(); }

	private static int parseDias(String dias, int defecto)
		{
		try{
			if(dias.contains(".")) {dias.replace(".", "");}
			return Integer.parseInt(dias);
			}catch(Exception e) {}
		return defecto;
		}

	public static int getDiasEspera()
		{ return diasEspera; }
	public static void setDiasEspera(int dias)
		{ diasEspera = dias; }
	public static void setDiasEspera(String dias)
		{ diasEspera = parseDias(dias, diasEspera); }

        public static int getDiasConfeccion()
		{ return diasConfeccion; }
	public static void setDiasConfeccion(String dias)
		{ diasConfeccion = parseDias(dias, diasConfeccion); }
	public static int getCicloMinimo()
		{ return cicloMinimo; }
	public static void setCicloMinimo(int dias)
		{ cicloMinimo = dias; }
	public static void setCicloMinimo(String dias)
		{
		try{
			if(dias.contains(".")) {dias.replace(".", "");}
			cicloMinimo = Integer.parseInt(dias);
			}catch(Exception e) {}
		}

	public static int getCicloMedio()
		{ return cicloMedio; }
	public static void setCicloMedio(int dias)
		{ cicloMedio = dias; }
	public static void setCicloMedio(String dias)
		{
		try{
			if(dias.contains(".")) {dias.replace(".", "");}
			cicloMedio = Integer.parseInt(dias);
			}catch(Exception e) {}
		}

	public static int getCicloMaximo()
		{ return cicloMaximo; }
	public static void setCicloMaximo(int dias)
		{ cicloMaximo = dias; }
	public static void setCicloMaximo(String dias)
		{
		try{
			if(dias.contains(".")) {dias.replace(".", "");}
			cicloMaximo = Integer.parseInt(dias);
			}catch(Exception e) {}
		}

	private static void leerValores()
		{
		try{
			ObjectInputStream entrada = new ObjectInputStream (new FileInputStream ("restricciones.out"));
			diasEspera = Integer.parseInt(entrada.readObject().toString());
			cicloMinimo = Integer.parseInt(entrada.readObject().toString());
			cicloMedio = Integer.parseInt(entrada.readObject().toString());
			cicloMaximo = Integer.parseInt(entrada.readObject().toString());
                        diasConfeccion = Integer.parseInt(entrada.readObject().toString());
			entrada.close();
			}catch(Exception e)
				{
				diasEspera = 10;
				cicloMinimo = 14;
				cicloMedio = 14;
				cicloMaximo = 14;
                                diasConfeccion = 0;
				}
		}

	public static void guardarValores() throws Exception
		{
		/*Serializo los datos en un archivo*/
		ObjectOutputStream salida = new ObjectOutputStream (new FileOutputStream ("restricciones.out"));
		salida.writeObject(diasEspera + "");
		salida.writeObject(cicloMinimo + "");
		salida.writeObject(cicloMedio + "");
		salida.writeObject(cicloMaximo + "");
                salida.writeObject(diasConfeccion + "");
		salida.close();
		}
	
	public static Map<String, Integer> getTiemposDeposito() throws SQLException
		{
		HashMap<String, Integer> mapa = new HashMap();
		ResultSet res = MySQL.executeQuery("SELECT * FROM " + TABLA_DEPOSITO_X_NEWLONG_X_UTECO);
		
		while(res.next())
			{ mapa.put(res.getInt("newlong_id") + "x" + res.getInt("uteco_id"), res.getInt("dias")); }
		res.getStatement().close();
		
		return mapa;
		}
	
	public static int getDiasDeposito(int newlongId, int utecoId) throws SQLException
		{
		int dias = 0;
		ResultSet res = MySQL.executeQuery("SELECT TiemposDeposito_Get("+newlongId+","+utecoId+") AS dias");
		if(res.next())
			{ dias = res.getInt("dias"); }
		res.getStatement().close();
		return dias;
		}
	
	public static Map<String, Integer> getTiemposDespacho() throws SQLException
		{
		HashMap<String, Integer> mapa = new HashMap();
		ResultSet res1 = MySQL.executeQuery("SELECT * FROM " + TABLA_DESPACHO_X_LINEA);
		ResultSet res2 = MySQL.executeQuery("SELECT * FROM " + TABLA_DESPACHO_X_NEWLONG_X_PAIS);
		
		while(res1.next())
			{ mapa.put(res1.getInt("linea_id") + "", res1.getInt("dias")); }
		res1.getStatement().close();
		
		while(res2.next())
			{ mapa.put(res2.getInt("newlong_id") + "x" + res2.getInt("pais_id"), res2.getInt("dias")); }
		res2.getStatement().close();
		
		return mapa;
		}
	
	public static int getDiasDespacho(int paisId, int newlongId, int lineaId) throws SQLException
		{
		int dias = 0;
		ResultSet res = MySQL.executeQuery("SELECT TiemposDespacho_Get("+paisId+","+newlongId+","+lineaId+") AS dias");
		if(res.next())
			{ dias = res.getInt("dias"); }
		res.getStatement().close();
		return dias;
		}
	
	public static void setDiasDeposito(int newlongId, int utecoId, int dias) throws SQLException
		{
		MySQL.executeUpdate("DELETE FROM " + TABLA_DEPOSITO_X_NEWLONG_X_UTECO + " WHERE newlong_id = " + newlongId + " AND uteco_id = " + utecoId);
		MySQL.executeUpdate("INSERT INTO " + TABLA_DEPOSITO_X_NEWLONG_X_UTECO + " (newlong_id, uteco_id, dias) VALUES ("+newlongId+","+utecoId+","+dias+")");
		}
	
	public static void setDiasDespacho(int newlongId, int paisId, int dias) throws SQLException
		{
		MySQL.executeUpdate("DELETE FROM " + TABLA_DESPACHO_X_NEWLONG_X_PAIS + " WHERE newlong_id = " + newlongId + " AND pais_id = " + paisId);
		MySQL.executeUpdate("INSERT INTO " + TABLA_DESPACHO_X_NEWLONG_X_PAIS + " (newlong_id, pais_id, dias) VALUES ("+newlongId+","+paisId+","+dias+")");
		}
	
	public static void setDiasDespacho(int lineaId, int dias) throws SQLException
		{
		MySQL.executeUpdate("DELETE FROM " + TABLA_DESPACHO_X_LINEA + " WHERE linea_id = " + lineaId);
		MySQL.executeUpdate("INSERT INTO " + TABLA_DESPACHO_X_LINEA + " (linea_id, dias) VALUES ("+lineaId+","+dias+")");
		}
	}
